package main

import (
	"fmt"         // 导入 fmt 包，用于格式化输入输出
	"math/rand/v2" // 导入 math/rand/v2 包，提供伪随机数生成器
)

func main() {
	// 使用默认的全局随机数生成器生成 0 到 99 之间的随机整数，并打印，后跟逗号
	fmt.Print(rand.IntN(100), ",")
	// 使用默认的全局随机数生成器生成另一个 0 到 99 之间的随机整数，并打印
	fmt.Print(rand.IntN(100))
	// 打印一个换行符
	fmt.Println()

	// 使用默认的全局随机数生成器生成一个 [0.0, 1.0) 范围内的随机浮点数并打印
	fmt.Println(rand.Float64())

	// 使用默认的全局随机数生成器生成一个 [0.0, 1.0) 范围内的随机浮点数，乘以 5 再加 5，结果在 [5.0, 10.0) 范围内，并打印，后跟逗号
	fmt.Print((rand.Float64()*5)+5, ",")
	// 使用默认的全局随机数生成器生成另一个 [0.0, 1.0) 范围内的随机浮点数，乘以 5 再加 5，结果在 [5.0, 10.0) 范围内，并打印
	fmt.Print((rand.Float64() * 5) + 5)
	// 打印一个换行符
	fmt.Println()

	// 使用种子 42 和增量 1024 创建一个新的 PCG 随机数生成器的源
	s2 := rand.NewPCG(42, 1024)
	// 基于该源创建一个新的随机数生成器 r2
	r2 := rand.New(s2)
	// 使用新的随机数生成器 r2 生成 0 到 99 之间的随机整数，并打印，后跟逗号
	fmt.Print(r2.IntN(100), ",")
	// 使用新的随机数生成器 r2 生成另一个 0 到 99 之间的随机整数，并打印
	fmt.Print(r2.IntN(100))
	// 打印一个换行符
	fmt.Println()

	// 再次使用相同的种子 42 和增量 1024 创建一个新的 PCG 随机数生成器的源
	s3 := rand.NewPCG(42, 1024)
	// 基于该源创建一个新的随机数生成器 r3
	r3 := rand.New(s3)
	// 使用新的随机数生成器 r3 生成 0 到 99 之间的随机整数，并打印，后跟逗号
	fmt.Print(r3.IntN(100), ",")
	// 使用新的随机数生成器 r3 生成另一个 0 到 99 之间的随机整数，并打印
	fmt.Print(r3.IntN(100))
	// 打印一个换行符
	fmt.Println()
}